package supermarket;

import java.util.*;
import model_remote.*;
import model.*;

public class CreditCardVerifier {

    private DBmanager db;
    private int numOfTries;

    public CreditCardVerifier(DBmanager db) {
        this.db = db;
        numOfTries = 0;
    }

    // Getters
    public DBmanager getDB() {
        return this.db;
    }

    public int getNumOfTries() {
        return numOfTries;
    }

    // Η παρακάτω μέθοδος ελέγχει αν μία πιστωτική κάρτα και μία πιστωτική
    // κάρτα της απομακρυσμένης Βάσης Δεδομένων ταυτίζονται
    public boolean sameCards(CreditCard ccard1, CreditCardAuthority ccard2) {
        if (ccard1.getBank().getBankId() == ccard2.getBank().getBankId()
                && String.valueOf(ccard1.getCvv()).equals(ccard2.getCvv())
                && ccard1.getNumber().equals(ccard2.getNumber())
                && ccard1.getOwnerName().equals(ccard2.getOwnerName())) {
            return true;
        } else {
            return false;
        }
    }

    //  ελέγχει αν μία πιστωτική κάρτα είναι έγκυρη
    public boolean verifyCard(CreditCard ccard) {
      
         // Ανέκτησε όλες τις έγκυρες πιστωτικές κάρτες
         List<CreditCardAuthority> validCCs = db.getAllValidCreditCards();
         // Για κάθε έγκυρη πιστωτική κάρτα
         for (CreditCardAuthority cca : validCCs) {
         // Αν ταυτίζεται με την κάρτα μας, τότε επέστρεψε true
         if (sameCards(ccard, cca)) {
         return true;
         }
         }
         // Δεν βρέθηκε καμία πιστωτική κάρτα που να ταιριάζει
         numOfTries++;
         return false;
        
    }
}
